home *** CD-ROM | disk | FTP | other *** search
/ Collection of Tools & Utilities / Collection of Tools and Utilities.iso / c / cl_7_bug.zip / BUG_4.C < prev    next >
C/C++ Source or Header  |  1992-10-10  |  2KB  |  78 lines

  1. /*
  2.    This program shows how CL can't even handle a simple operation as *pos++=..
  3.    without failing
  4. */   
  5.  
  6. #include <stdio.h>
  7.  
  8. #define MAX_SORT_ORDERS 16
  9.  
  10. typedef struct st_prt_var {            /* Info p} sista sk{rmen */
  11.    char summaflag[MAX_SORT_ORDERS],repeat[1];
  12.    int sidbyteflag,sidsumma,start_sum,w_page,w_empty,leftmarg,rep_reg,rep_field;
  13. } PRT_VAR;
  14.  
  15. typedef struct st_predit_param {
  16.   int        max_width;
  17.   int        post_width;
  18.   PRT_VAR    prtvar;                /* Inmatad form-info */
  19.   char        *c_postfix;
  20. } SCREENPARAM;
  21.  
  22. static void save_var(SCREENPARAM *s,char *forminfo);
  23. static void get_number_or_field(char *repeat,int *rep_reg,int *rep_field);
  24.  
  25. int main(int argc,char *argv[])
  26. {
  27.   SCREENPARAM s;
  28.   char forminfo[32];
  29.  
  30.   memset((char*) &forminfo,0,sizeof(forminfo));
  31.   memset((char*) &s,0,sizeof(s));
  32.  
  33.     /* Fill structure with something */
  34.   memset(s.prtvar.summaflag,'!',16);
  35.   s.prtvar.sidbyteflag='W';
  36.   s.prtvar.sidsumma='O';
  37.   s.prtvar.start_sum='R';
  38.   s.max_width='K';
  39.   s.prtvar.w_page='S';
  40.   s.post_width='!';
  41.   s.prtvar.rep_reg=0;
  42.  
  43.   save_var(&s,forminfo);
  44.   if (!strcmp(forminfo,"!!!!!!!!!!!!!!!!WORKS!"))
  45.     puts("What a suprise, the function worked");
  46.   else
  47.     printf("This program doesn't work (forminfo= '%s')\n",forminfo);
  48.   return 0;
  49. }
  50.    
  51. static void save_var(s,forminfo)
  52. register SCREENPARAM *s;
  53. register char *forminfo;
  54. {
  55.   char *pos;
  56.   PRT_VAR *prtvar;
  57.  
  58.   prtvar= &s->prtvar;
  59.   get_number_or_field(prtvar->repeat,&prtvar->rep_reg,&prtvar->rep_field);
  60.   pos=forminfo;
  61.   memcpy(pos,prtvar->summaflag,MAX_SORT_ORDERS);
  62.   pos+=16;
  63.   *pos++= (char) prtvar->sidbyteflag;
  64.   *pos++= (char) prtvar->sidsumma;
  65.   *pos++= (char) prtvar->start_sum;
  66.   *pos++= (char) s->max_width;
  67.   *pos++= (char) prtvar->w_page;
  68.   *pos++= (char) s->post_width;
  69.   *pos++= (char) prtvar->rep_reg;
  70. } /* save_var */
  71.  
  72.     /* This function is here to confuse CL-7.00 */
  73.  
  74. static void get_number_or_field(char *repeat,int *rep_reg,int *rep_field)
  75. {
  76.   return;
  77. }
  78.